package com.event.management.frontend.service;

import com.event.management.frontend.domain.Order;
import com.event.management.frontend.dto.OrderCreateDTO;
import com.event.management.frontend.dto.OrderDTO;
import com.event.management.frontend.dto.OrderDetailDTO;
import com.event.management.frontend.dto.OrderStatusDTO;

import java.util.List;

/**
 * 订单服务接口
 */
public interface OrderService {

    /**
     * 创建订单
     * @param userId 用户ID
     * @param createDTO 创建订单参数
     * @return 订单ID
     */
    Long createOrder(Long userId, OrderCreateDTO createDTO);

    /**
     * 支付订单
     * @param userId 用户ID
     * @param orderId 订单ID
     * @return 是否成功
     */
    boolean payOrder(Long userId, Long orderId);

    /**
     * 取消订单
     * @param userId 用户ID
     * @param orderId 订单ID
     * @return 是否成功
     */
    boolean cancelOrder(Long userId, Long orderId);

    /**
     * 获取订单状态
     * @param orderId 订单ID
     * @return 订单状态
     */
    OrderStatusDTO getOrderStatus(Long orderId);

    /**
     * 获取订单详情
     * @param userId 用户ID
     * @param orderId 订单ID
     * @return 订单详情
     */
    OrderDetailDTO getOrderDetail(Long userId, Long orderId);

    /**
     * 获取我的订单列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @return 订单列表
     */
    List<OrderDTO> getMyOrders(Long userId, int page, int size);

    /**
     * 获取我的订单总数
     * @param userId 用户ID
     * @return 订单总数
     */
    long countMyOrders(Long userId);
    
    /**
     * 根据条件查询订单列表
     * @param userId 用户ID
     * @param page 页码
     * @param size 每页大小
     * @param keyword 关键词（订单号、活动名称等）
     * @param status 订单状态
     * @return 订单列表
     */
    List<OrderDTO> getFilteredOrders(Long userId, int page, int size, String keyword, String status);
    
    /**
     * 根据条件统计订单数量
     * @param userId 用户ID
     * @param keyword 关键词
     * @param status 订单状态
     * @return 订单数量
     */
    long countFilteredOrders(Long userId, String keyword, String status);
} 